memory_unsafe_functions = {
    # 缓冲区溢出（Buffer Overflow）
    "buffer_overflow": {
        "source":[
        "gets",      # 从标准输入读取数据（无缓冲区检查）
        "scanf",     # 从标准输入格式化读取
        "fscanf",    # 从文件流格式化读取
        "sscanf"     # 从字符串格式化解析（若输入字符串来自不可信源）
    ],
    "sink":[
        "strcpy",    # 不安全的字符串复制（缓冲区溢出）
        "strcat",    # 不安全的字符串追加（缓冲区溢出）
        "sprintf",   # 格式化字符串到缓冲区（缓冲区溢出/格式化字符串漏洞）
        "vsprintf",  # 可变参数格式化字符串（同上）
        "memcpy",    # 内存复制（长度错误导致溢出）
        "memmove",   # 内存移动（同上）
        "bcopy"      # 内存复制（传统实现，类似 memcpy）
        ]
    },

    # 格式化字符串漏洞（Format String Vulnerability）
    "format_string": [
        "printf", "fprintf", "sprintf", "snprintf",
        "vprintf", "vfprintf", "vsprintf", "vsnprintf", "syslog"
    ],

    # 堆内存管理漏洞（Heap Memory Issues）
    "heap_memory": [
        "malloc", "free", "calloc", "realloc", "strdup"
    ],

    # 整数溢出（Integer Overflow）
    "integer_overflow": [
        "malloc", "memcpy"  # 通常与计算参数有关，函数本身可能被误用
    ],

    # 文件/IO操作相关漏洞
    "file_io": [
        "read", "fread", "write", "fwrite", "getline", "readline"
    ],

    # 环境变量/命令行参数处理
    "env_command": [
        "getenv", "system", "popen"
    ],

    # 其他危险函数
    "others": [
        "alloca", "memset", "bzero"
    ]
}



def buffer_overflow_funcs():
    """
    获取缓冲区溢出函数列表
    :return: 函数列表
    """
    return memory_unsafe_functions["buffer_overflow"]['source'] + memory_unsafe_functions["buffer_overflow"]['sink']

def buffer_overflow_sink_funcs():
    """
    获取缓冲区溢出函数列表
    :return: 函数列表
    """
    
    prefix=""
    
    func_list= memory_unsafe_functions["buffer_overflow"]['sink']
    
    
    return [prefix + func for func in func_list]

def buffer_overflow_source_funcs():
    """
    获取缓冲区溢出函数列表
    :return: 函数列表
    """
    
    prefix=""
    func_list = memory_unsafe_functions["buffer_overflow"]['source']
    
    return [prefix + func for func in func_list]

def format_string_funcs():
    """
    获取格式化字符串函数列表
    :return: 函数列表
    """
    return memory_unsafe_functions["format_string"]

def heap_memory_funcs():
    """
    获取堆内存管理函数列表
    :return: 函数列表
    """
    return memory_unsafe_functions["heap_memory"]

def integer_overflow_funcs():
    """
    获取整数溢出函数列表
    :return: 函数列表
    """
    return memory_unsafe_functions["integer_overflow"]